var BMapLib = window.BMapLib = BMapLib || {};
(function() {
  var d, c = d = c || { version: '1.3.8' };
  (function() {
    c.guid = '$BAIDU$'
    window[c.guid] = window[c.guid] || {}
    c.dom = c.dom || {}
    c.dom.g = function(f) {
      if ('string' == typeof f || f instanceof String) {
        return document.getElementById(f)
      } else {
        if (f && f.nodeName && (f.nodeType == 1 || f.nodeType == 9)) {
          return f
        }
      }
      return null
    }
    c.g = c.G = c.dom.g
    c.dom.getDocument = function(f) {
      f = c.dom.g(f)
      return f.nodeType == 9 ? f : f.ownerDocument || f.document
    }
    c.lang = c.lang || {}
    c.lang.isString = function(f) {
      return '[object String]' == Object.prototype.toString.call(f)
    }
    c.isString = c.lang.isString
    c.dom._g = function(f) {
      if (c.lang.isString(f)) {
        return document.getElementById(f)
      }
      return f
    }
    c._g = c.dom._g
    c.browser = c.browser || {}
    if (/msie (\d+\.\d)/i.test(navigator.userAgent)) {
      c.browser.ie = c.ie = document.documentMode || +RegExp['\x241']
    }
    c.dom.getComputedStyle = function(g, f) {
      g = c.dom._g(g)
      var i = c.dom.getDocument(g), h
      if (i.defaultView && i.defaultView.getComputedStyle) {
        h = i.defaultView.getComputedStyle(g, null)
        if (h) {
          return h[f] || h.getPropertyValue(f)
        }
      }
      return ''
    }
    c.dom._styleFixer = c.dom._styleFixer || {}
    c.dom._styleFilter = c.dom._styleFilter || []
    c.dom._styleFilter.filter = function(g, k, l) {
      for (var f = 0, j = c.dom._styleFilter, h; h = j[f]; f++) {
        if (h = h[l]) {
          k = h(g, k)
        }
      }
      return k
    }
    c.string = c.string || {}
    c.string.toCamelCase = function(f) {
      if (f.indexOf('-') < 0 && f.indexOf('_') < 0) {
        return f
      }
      return f.replace(/[-_][^-_]/g, function(g) {
        return g.charAt(1).toUpperCase()
      })
    }
    c.dom.getStyle = function(h, g) {
      var j = c.dom
      h = j.g(h)
      g = c.string.toCamelCase(g)
      var i = h.style[g] || (h.currentStyle ? h.currentStyle[g] : '') || j.getComputedStyle(h, g)
      if (!i) {
        var f = j._styleFixer[g]
        if (f) {
          i = f.get ? f.get(h) : c.dom.getStyle(h, f)
        }
      }
      if (f = j._styleFilter) {
        i = f.filter(g, i, 'get')
      }
      return i
    }
    c.getStyle = c.dom.getStyle
    if (/opera\/(\d+\.\d)/i.test(navigator.userAgent)) {
      c.browser.opera = +RegExp['\x241']
    }
    c.browser.isWebkit = /webkit/i.test(navigator.userAgent)
    c.browser.isGecko = /gecko/i.test(navigator.userAgent) && !/like gecko/i.test(navigator.userAgent)
    c.browser.isStrict = document.compatMode == 'CSS1Compat'
    c.dom.getPosition = function(f) {
      f = c.dom.g(f)
      var o = c.dom.getDocument(f), i = c.browser, l = c.dom.getStyle,
        h = i.isGecko > 0 && o.getBoxObjectFor && l(f, 'position') == 'absolute' && (f.style.top === '' || f.style.left === ''),
        m = { left: 0, top: 0 }, k = (i.ie && !i.isStrict) ? o.body : o.documentElement, p, g
      if (f == k) {
        return m
      }
      if (f.getBoundingClientRect) {
        g = f.getBoundingClientRect()
        m.left = Math.floor(g.left) + Math.max(o.documentElement.scrollLeft, o.body.scrollLeft)
        m.top = Math.floor(g.top) + Math.max(o.documentElement.scrollTop, o.body.scrollTop)
        m.left -= o.documentElement.clientLeft
        m.top -= o.documentElement.clientTop
        var n = o.body, q = parseInt(l(n, 'borderLeftWidth')), j = parseInt(l(n, 'borderTopWidth'))
        if (i.ie && !i.isStrict) {
          m.left -= isNaN(q) ? 2 : q
          m.top -= isNaN(j) ? 2 : j
        }
      } else {
        p = f
        do {
          m.left += p.offsetLeft
          m.top += p.offsetTop
          if (i.isWebkit > 0 && l(p, 'position') == 'fixed') {
            m.left += o.body.scrollLeft
            m.top += o.body.scrollTop
            break
          }
          p = p.offsetParent
        } while (p && p != f)
        if (i.opera > 0 || (i.isWebkit > 0 && l(f, 'position') == 'absolute')) {
          m.top -= o.body.offsetTop
        }
        p = f.offsetParent
        while (p && p != o.body) {
          m.left -= p.scrollLeft
          if (!i.opera || p.tagName != 'TR') {
            m.top -= p.scrollTop
          }
          p = p.offsetParent
        }
      }
      return m
    }
    c.event = c.event || {}
    c.event._listeners = c.event._listeners || []
    c.event.on = function(g, j, l) {
      j = j.replace(/^on/i, '')
      g = c.dom._g(g)
      var k = function(n) {
        l.call(g, n)
      }, f = c.event._listeners, i = c.event._eventFilter, m, h = j
      j = j.toLowerCase()
      if (i && i[j]) {
        m = i[j](g, j, k)
        h = m.type
        k = m.listener
      }
      if (g.addEventListener) {
        g.addEventListener(h, k, false)
      } else {
        if (g.attachEvent) {
          g.attachEvent('on' + h, k)
        }
      }
      f[f.length] = [g, j, l, k, h]
      return g
    }
    c.on = c.event.on;
    (function() {
      var f = window[c.guid]
      c.lang.guid = function() {
        return 'TANGRAM__' + (f._counter++).toString(36)
      }
      f._counter = f._counter || 1
    })()
    window[c.guid]._instances = window[c.guid]._instances || {}
    c.lang.isFunction = function(f) {
      return '[object Function]' == Object.prototype.toString.call(f)
    }
    c.lang.Class = function(f) {
      this.guid = f || c.lang.guid()
      window[c.guid]._instances[this.guid] = this
    }
    window[c.guid]._instances = window[c.guid]._instances || {}
    c.lang.Class.prototype.dispose = function() {
      delete window[c.guid]._instances[this.guid]
      for (var f in this) {
        if (!c.lang.isFunction(this[f])) {
          delete this[f]
        }
      }
      this.disposed = true
    }
    c.lang.Class.prototype.toString = function() {
      return '[object ' + (this._className || 'Object') + ']'
    }
    c.lang.Event = function(f, g) {
      this.type = f
      this.returnValue = true
      this.target = g || null
      this.currentTarget = null
    }
    c.lang.Class.prototype.addEventListener = function(i, h, g) {
      if (!c.lang.isFunction(h)) {
        return
      }
      !this.__listeners && (this.__listeners = {})
      var f = this.__listeners, j
      if (typeof g == 'string' && g) {
        if (/[^\w\-]/.test(g)) {
          throw ('nonstandard key:' + g)
        } else {
          h.hashCode = g
          j = g
        }
      }
      i.indexOf('on') != 0 && (i = 'on' + i)
      typeof f[i] != 'object' && (f[i] = {})
      j = j || c.lang.guid()
      h.hashCode = j
      f[i][j] = h
    }
    c.lang.Class.prototype.removeEventListener = function(i, h) {
      if (typeof h != 'undefined') {
        if ((c.lang.isFunction(h) && !(h = h.hashCode)) || (!c.lang.isString(h))) {
          return
        }
      }
      !this.__listeners && (this.__listeners = {})
      i.indexOf('on') != 0 && (i = 'on' + i)
      var g = this.__listeners
      if (!g[i]) {
        return
      }
      if (typeof h != 'undefined') {
        g[i][h] && delete g[i][h]
      } else {
        for (var f in g[i]) {
          delete g[i][f]
        }
      }
    }
    c.lang.Class.prototype.dispatchEvent = function(j, f) {
      if (c.lang.isString(j)) {
        j = new c.lang.Event(j)
      }
      !this.__listeners && (this.__listeners = {})
      f = f || {}
      for (var h in f) {
        j[h] = f[h]
      }
      var h, g = this.__listeners, k = j.type
      j.target = j.target || this
      j.currentTarget = this
      k.indexOf('on') != 0 && (k = 'on' + k)
      c.lang.isFunction(this[k]) && this[k].apply(this, arguments)
      if (typeof g[k] == 'object') {
        for (h in g[k]) {
          g[k][h].apply(this, arguments)
        }
      }
      return j.returnValue
    }
    c.lang.inherits = function(l, j, i) {
      var h, k, f = l.prototype, g = new Function()
      g.prototype = j.prototype
      k = l.prototype = new g()
      for (h in f) {
        k[h] = f[h]
      }
      l.prototype.constructor = l
      l.superClass = j.prototype
      if ('string' == typeof i) {
        k._className = i
      }
    }
    c.inherits = c.lang.inherits
  })()
  var b = 'http://api.map.baidu.com/library/TextIconOverlay/1.2/src/images/m'
  var a = 'png'
  var e = BMapLib.TextIconOverlay = function(f, h, g) {
    this._position = f
    this._text = h
    this._options = g || {}
    this._styles = this._options.styles || [];
    (!this._styles.length) && this._setupDefaultStyles()
  }
  d.lang.inherits(e, BMap.Overlay, 'TextIconOverlay')
  e.prototype._setupDefaultStyles = function() {
    var h = [53, 56, 66, 78, 90]
    for (var g = 0, f; f = h[g]; g++) {
      this._styles.push({ url: b + g + '.' + a, size: new BMap.Size(f, f) })
    }
  }
  e.prototype.initialize = function(f) {
    this._map = f
    this._domElement = document.createElement('div')
    this._updateCss()
    this._updateText()
    this._updatePosition()
    this._bind()
    this._map.getPanes().markerMouseTarget.appendChild(this._domElement)
    return this._domElement
  }
  e.prototype.draw = function() {
    this._map && this._updatePosition()
  }
  e.prototype.getText = function() {
    return this._text
  }
  e.prototype.setText = function(f) {
    if (f && (!this._text || (this._text.toString() != f.toString()))) {
      this._text = f
      this._updateText()
      this._updateCss()
      this._updatePosition()
    }
  }
  e.prototype.getPosition = function() {
    return this._position
  }
  e.prototype.setPosition = function(f) {
    if (f && (!this._position || !this._position.equals(f))) {
      this._position = f
      this._updatePosition()
    }
  }
  e.prototype.getStyleByText = function(i, h) {
    var g = parseInt(i)
    var f = parseInt(g / 10)
    f = Math.max(0, f)
    f = Math.min(f, h.length - 1)
    return h[f]
  }
  e.prototype._updateCss = function() {
    var f = this.getStyleByText(this._text, this._styles)
    this._domElement.style.cssText = this._buildCssText(f)
  }
  e.prototype._updateText = function() {
    if (this._domElement) {
      this._domElement.innerHTML = this._text
    }
  }
  e.prototype._updatePosition = function() {
    if (this._domElement && this._position) {
      var f = this._domElement.style
      var g = this._map.pointToOverlayPixel(this._position)
      g.x -= Math.ceil(parseInt(f.width) / 2)
      g.y -= Math.ceil(parseInt(f.height) / 2)
      f.left = g.x + 'px'
      f.top = g.y + 'px'
    }
  }
  e.prototype._buildCssText = function(g) {
    var h = g.url
    var n = g.size
    var k = g.anchor
    var j = g.offset
    var l = g.textColor || 'black'
    var f = g.textSize || 10
    var m = []
    if (d.browser.ie < 7) {
      m.push('filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale,src="' + h + '");')
    } else {
      m.push('background-image:url(' + h + ');')
      var i = '0 0';
      (j instanceof BMap.Size) && (i = j.width + 'px ' + j.height + 'px')
      m.push('background-position:' + i + ';')
    }
    if (n instanceof BMap.Size) {
      if (k instanceof BMap.Size) {
        if (k.height > 0 && k.height < n.height) {
          m.push('height:' + (n.height - k.height) + 'px; padding-top:' + k.height + 'px;')
        }
        if (k.width > 0 && k.width < n.width) {
          m.push('width:' + (n.width - k.width) + 'px; padding-left:' + k.width + 'px;')
        }
      } else {
        m.push('height:' + n.height + 'px; line-height:' + n.height + 'px;')
        m.push('width:' + n.width + 'px; text-align:center;')
      }
    }
    m.push('cursor:pointer; color:' + l + '; position:absolute; font-size:' + f + 'px; font-family:Arial,sans-serif; font-weight:bold')
    return m.join('')
  }
  e.prototype._bind = function() {
    if (!this._domElement) {
      return
    }
    var g = this
    var i = this._map
    var f = d.lang.Event

    function h(m, l) {
      var k = m.srcElement || m.target
      var j = m.clientX || m.pageX
      var o = m.clientY || m.pageY
      if (m && l && j && o && k) {
        var n = d.dom.getPosition(i.getContainer())
        l.pixel = new BMap.Pixel(j - n.left, o - n.top)
        l.point = i.pixelToPoint(l.pixel)
      }
      return l
    }

    d.event.on(this._domElement, 'mouseover', function(j) {
      g.dispatchEvent(h(j, new f('onmouseover')))
    })
    d.event.on(this._domElement, 'mouseout', function(j) {
      g.dispatchEvent(h(j, new f('onmouseout')))
    })
    d.event.on(this._domElement, 'click', function(j) {
      g.dispatchEvent(h(j, new f('onclick')))
    })
  }
})()